TOP
Riorganizzazione delle tabelle (Unpivot) in LibreOffice Calc
Descrizione
A volte è necessario convertire una tabella a croce (pivot) in una tabella piatta. Questa procedura si chiama " raddrizzamento dei dati " (unpivot data) . In conseguenza di tale" raddrizzamento " otteniamo una tabella in cui tutti i dati simili sono in una colonna.
Il programma LibreOffice Calc non dispone di una funzionalità standard per convertire le tabelle pivot in " Piatto ", ma puoi scrivere tu stesso la procedura corrispondente. Vediamo come farlo.
Diamo un'occhiata all'immagine qui sotto per comprendere più chiaramente l'essenza del problema. A sinistra abbiamo una tabella sotto forma di matrice (tabella pivot) e a destra - una tabella normale con colonne (tabella piatta):
Quando espandi una tabella, decomprimi la coppia attributo-valore che è l'intersezione delle colonne nella tabella a matrice e le riorienti nelle colonne appiattite nella tabella piatta:
Valore (Values) (blu a sinistra) espande in una nuova colonna (blu a destra);
Attributi (Attributes) (verde a sinistra) vengono inoltre espansi in una nuova colonna (verde a destra) e duplicati in base alla nuova colonna di valori.
Codice StarBASIC per la procedura UnPivotTable
Apri il menu Tools - Macros - Edit Macros..., seleziona Module1 e copia il seguente testo nel modulo:
- Sub UnPivotTable
-
- Dim oBook As Object
- Dim oActiveSheet As Object
- Dim oSelRange As Object
- Dim oNewSheet As Object
-
- Dim i As Long
- Dim iTopLabelRowCount As Integer
- Dim iSideLabelColCount As Integer
-
- oBook = ThisComponent
- oActiveSheet = oBook.CurrentController.ActiveSheet
- oSelRange = oBook.CurrentSelection
-
-
- oBook.Sheets.insertNewByName("UnPivoted Table",0)
- oNewSheet = oBook.Sheets(0)
-
-
- iTopLabelRowCount = InputBox(" Quante righe nell'intestazione superiore? ")
- iSideLabelColCount = InputBox(" Quante colonne nell'intestazione laterale? ")
-
- i = 0
-
- For r = (iTopLabelRowCount + 1) To oSelRange.Rows.Count
- For c = (iSideLabelColCount + 1) To oSelRange.Columns.Count
-
- For j = 1 To iSideLabelColCount
- oNewSheet.getCellByPosition(j-1, i).Formula = oSelRange.getCellByPosition(j-1, r-1).Formula
- Next j
-
- For k = 1 To iTopLabelRowCount
- oNewSheet.getCellByPosition(j + k - 2, i).Formula = oSelRange.getCellByPosition(c-1, k-1).Formula
- Next k
-
- oNewSheet.getCellByPosition(j + k - 2, i).Formula = oSelRange.getCellByPosition(c-1, r-1).Formula
- i = i + 1
-
- Next c
- Next r
- End Sub
Sub UnPivotTable
' moonexcel.com.ua
Dim oBook As Object
Dim oActiveSheet As Object
Dim oSelRange As Object
Dim oNewSheet As Object
Dim i As Long
Dim iTopLabelRowCount As Integer
Dim iSideLabelColCount As Integer
oBook = ThisComponent
oActiveSheet = oBook.CurrentController.ActiveSheet
oSelRange = oBook.CurrentSelection
' Aggiungi un nuovo foglio
oBook.Sheets.insertNewByName("UnPivoted Table",0)
oNewSheet = oBook.Sheets(0)
' Determina la dimensione delle intestazioni
iTopLabelRowCount = InputBox(" Quante righe nell'intestazione superiore? ")
iSideLabelColCount = InputBox(" Quante colonne nell'intestazione laterale? ")
i = 0
For r = (iTopLabelRowCount + 1) To oSelRange.Rows.Count
For c = (iSideLabelColCount + 1) To oSelRange.Columns.Count
For j = 1 To iSideLabelColCount
oNewSheet.getCellByPosition(j-1, i).Formula = oSelRange.getCellByPosition(j-1, r-1).Formula
Next j
For k = 1 To iTopLabelRowCount
oNewSheet.getCellByPosition(j + k - 2, i).Formula = oSelRange.getCellByPosition(c-1, k-1).Formula
Next k
oNewSheet.getCellByPosition(j + k - 2, i).Formula = oSelRange.getCellByPosition(c-1, r-1).Formula
i = i + 1
Next c
Next r
End Sub
Quindi chiudi Macro Editor e torna al foglio di lavoro in LibreOffice Calc. Seleziona l'intera tabella con le intestazioni in alto e a sinistra ed esegui la nostra nuova macro tramite il menu Tools - Macros - Run Macro...
La macro inserirà un nuovo foglio con nome nella cartella di lavoro "UnPivoted Table" e quindi aggiungere una tabella nel nuovo formato. Con una tabella di questo tipo puoi eseguire qualsiasi analisi in LibreOffice Calc.
Utilizzando l'estensione
Puoi anche usare l'utility "Tabella pivot (Unpivot)" installando l'estensione YLC_Utilities.oxt .
Successivamente, questa utilità sarà disponibile in tutti i file che verranno aperti in LibreOffice Calc.
Articoli sull'argomento:
Riorganizzazione delle tabelle (Unpivot) in Excel